package net.freestu.sola.web.global;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;



/**
 * 这个类的设计现在看起来没有一点道理啊。以前是想用于在进行分析链接的时候，能判断是否能连接服务器。
 * 但用LinkHash同样能实现，这个设计就没必要了。depr了！！！
 * 而且引起了UrlPicker和ContentTypeFilter这个类强烈的耦合，违背设计模式的思想。
 * @author 秋刀鱼的滋味
 *
 */
public class UnLinkHash {
	
	
		private Set myhash;		
		private String name;
		
		
		public UnLinkHash(String name){
			
			myhash=new HashSet();
			this.name=name;
		}
		
		public int getItemNum(){//getter
			
			return myhash.size();
		}
				
		public void put(String urlstr){
			
			myhash.add(urlstr);
		}
		
		
		/**
		  判断容器里面是否有该链接。
		  */
		public boolean checkLink(String urlstr){//判断容器里面是否有该链接。
				
				return myhash.contains(urlstr);
		}
			
		/**
		  把数据从硬盘(LinkHash)上读入内存中。(非自动)
		  */
		public void readDataIn(){//把数据从硬盘上读入内存中。
				
				 try {
		       FileReader fr = new FileReader(GlobleVar.EXEFOLDER+File.separator+
		    		   "Crawl Folder"+File.separator+name+File.separator+"UnLinkHash");
		       BufferedReader br = new BufferedReader(fr);
		       String str;
		       while(br.ready()){
		        	
		       	str=br.readLine();
		       	myhash.add(str);
		       }
		       br.close();
		       fr.close();
		     }
		     catch (IOException ex){
		       ex.printStackTrace();
		     } 
		}	
		  
		
		 /**
		  把内存中的数据写入硬盘(LinkHash)之中
		  */
		public void writeDataOut(){
		  //1.建立文件这个在prepare里面进行。这一步不需要创建文件
		     try {
		       FileWriter fw =new FileWriter(GlobleVar.EXEFOLDER+File.separator+"Crawl Folder"+
		    		   File.separator+name+File.separator+"UnLinkHash");    //!!!这个地方。
		       BufferedWriter bw =new BufferedWriter(fw);     //创建一个BufferedReader对象
				   Iterator it=myhash.iterator();
				   
				   while(it.hasNext()){
				   
		        String str=(String)it.next();//这里如果不兼容，直接强制转化就行了。		
				    bw.write(str);
				    bw.newLine();                              //换行。
		       }
		        bw.flush();                                //清空缓存
		        bw.close();            
		        fw.close();           
		     }
		     catch (IOException ex) {
		       ex.printStackTrace();
		     } 
		  }
		  
		public boolean contains(String str){
		  	
		  	return myhash.contains(str);
		}
		  
		  /**
		  测试函数
		  */
		public void print(){
		  	
		  	Iterator it=myhash.iterator();
		  	while(it.hasNext()){
		  		System.out.println(it.next());
		    }
		  }
 }